package com.ywyself.controller.admin;

import com.jfinal.aop.Clear;
import com.jfinal.core.ActionKey;
import com.ywyself.common.pool.DataLoad;
import com.ywyself.controller.SessManager;
import com.ywyself.controller.ToolsController;
import com.ywyself.controller.base.YsController;
import com.ywyself.ext.kit.YsKit;
import com.ywyself.ext.utils.YsRequestUtils;
import com.ywyself.ext.utils.YsStringUtils;
import com.ywyself.model.User;
import com.ywyself.service.UserService;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Random;

/**
 * 登录，注销
 *
 * @author YuWenYue
 * @date 2017年10月10日 下午8:35:54
 */
public class IndexController extends YsController {

    /**
     * 登录
     */
    @Clear
    @ActionKey(ADMIN_ROOT)
    public void index() {
        forwardAction(ADMIN_ROOT + "/login");
    }

    /**
     * 登录
     */
    @Clear
    @ActionKey(ADMIN_ROOT + "/login")
    public void login() {
        String url = getPara("url");
        if (!YsStringUtils.isBlank(url)) {
            setAttr("url", url);
        }
        render(BACK_STAGE + "/login.html");
    }

    /**
     * 登录检查
     */
    @Clear
    @ActionKey(ADMIN_ROOT + "/login/save")
    public void login_action() {
        String userName = getPara("username"); // 账号
        String userPass = getPara("userpass"); // 密码
        String captcha = getPara("captcha"); // 验证码
        String redirecUrl = getPara("url"); // 登录成功后的跳转链接

        if (!ToolsController.validateCaptcha(this, captcha)) {
            YsKit.fail().code("400").msg("验证码错误").render(this);
            return;
        }
        YsKit ret = UserService.EXC.doAuth(userName, userPass);
        if (ret.isOk()) {
            User u = ret.getData();
            SessManager.saveSession(this, u);
            UserService.EXC.updateLog(u.getId(), YsRequestUtils.getIpAddress(getRequest()));
            if (!YsStringUtils.isBlank(redirecUrl)) {
                try {
                    ret.code("102").set("url", URLDecoder.decode(redirecUrl, "UTF-8")).render(this);
                } catch (UnsupportedEncodingException e) {
                    ret.code("102").set("url", ADMIN_ROOT + "/home").render(this);
                }
            } else {
                ret.code("102").set("url", ADMIN_ROOT + "/home").render(this);
            }
        } else {
            ret.render(this);
        }
    }

    /**
     * 登出，退出
     */
    @ActionKey(ADMIN_ROOT + "/logout")
    public void logout() {
        SessManager.removeSession(this);
        if (SessManager.getSession(this) == null) {
            YsKit.ok().msg("退出成功").code("102").set("url", "/").render(this);
        } else {
            YsKit.fail().msg("退出失败").code("400").render(this);
        }
    }

    /**
     * 更新会话中保存的用户数据
     */
    @ActionKey(ADMIN_ROOT + "/reload/userdata")
    public void reloadUserCache() {
        User u = SessManager.getSession(this);
        DataLoad.loadUser(u.getId(), this);
        YsKit.ok().code("101").msg("数据加载完成").render(this);
    }

    /**
     * 刷新缓存
     */
    @ActionKey(ADMIN_ROOT + "/reload/cache")
    public void reloadCache() {
        DataLoad.loadSiteConfig();
        try {
            Thread.sleep((new Random().nextInt(10)) * 1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        YsKit.ok().code("100").msg("刷新完成").render(this);
    }

    /**
     * 后台首页
     */
    @ActionKey(ADMIN_ROOT + "/home")
    public void home() {
        setPageTitle("首页");
        setAttr("tab", "home");
        render(BACK_STAGE + "/home.html");
    }
}
